home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / sviluppo / svilupp2 / whdload.lha / WHDLoad / include / whdload.i
Text File  |  1996-11-17  |  8KB  |  303 lines

  1.  
  2.  IFND WHDLOAD_I
  3. WHDLOAD=1
  4.  
  5.     IFND    EXEC_EXECBASE_I
  6.     INCLUDE    exec/execbase.i
  7.     ENDC
  8.     IFND    EXEC_TYPES_I
  9.     INCLUDE    exec/types.i
  10.     ENDC
  11.     IFND    HARDWARE_CIA_I
  12.     INCLUDE    hardware/cia.i
  13.     ENDC
  14.     IFND    HARDWARE_CUSTOM_I
  15.     INCLUDE    hardware/custom.i
  16.     ENDC
  17.     IFND    HARDWARE_INTBITS_I
  18.     INCLUDE    hardware/intbits.i
  19.     ENDC
  20.     IFND    HARDWARE_DMABITS_I
  21.     INCLUDE    hardware/dmabits.i
  22.     ENDC
  23.  
  24.  BITDEF POTGO,OUTRY,15
  25.  BITDEF POTGO,DATRY,14
  26.  BITDEF POTGO,OUTRX,13
  27.  BITDEF POTGO,DATRX,12
  28.  BITDEF POTGO,OUTLY,11
  29.  BITDEF POTGO,DATLY,10
  30.  BITDEF POTGO,OUTLX,9
  31.  BITDEF POTGO,DATLX,8
  32.  BITDEF POTGO,START,0
  33.  
  34. _ciaa        = $bfe001
  35. _ciab        = $bfd000
  36. _custom        = $dff000
  37.  
  38. ;======================================================================
  39. ;    misc
  40. ;======================================================================
  41.  
  42. SLAVE_DEFNAME    MACRO
  43.     dc.b    "WHDLoad.Slave",0
  44.         ENDM
  45. SLAVE_SECURITY    MACRO
  46.     moveq    #-1,d0
  47.     rts
  48.         ENDM
  49. SLAVE_ID    MACRO
  50.     dc.b    "WHDLOADS"
  51.         ENDM
  52. SLAVE_HEADER    MACRO
  53.     SLAVE_SECURITY
  54.     SLAVE_ID
  55.         ENDM
  56.  
  57. ;======================================================================
  58. ;    some useful macros
  59. ;======================================================================
  60.  
  61. ****************************************************************
  62. ***** write opcode ILLEGAL to specified address
  63. ill    MACRO
  64.     IFEQ    NARG-1
  65.         move.w    #$4afc,\1
  66.     ELSE
  67.         FAIL    arguments "ill"
  68.     ENDC
  69.     ENDM
  70.  
  71. ****************************************************************
  72. ***** write opcode RTS to specified address
  73. ret    MACRO
  74.     IFEQ    NARG-1
  75.         move.w    #$4e75,\1
  76.     ELSE
  77.         FAIL    arguments "ret"
  78.     ENDC
  79.     ENDM
  80.  
  81. ****************************************************************
  82. ***** write \1 times opcode NOP starting at address \2
  83. nops    MACRO
  84.     IFEQ    NARG-2
  85.         movem.l    d0/a0,-(a7)
  86.         moveq    #\1-1,d0
  87.         lea    \2,a0
  88. .lp\@        move.w    #$4e71,(a0)+
  89.         dbf    d0,.lp\@
  90.         movem.l    (a7)+,d0/a0
  91.     ELSE
  92.         FAIL    arguments "nops"
  93.     ENDC
  94.     ENDM
  95.  
  96. ****************************************************************
  97. ***** write opcode JMP \2 to address \1
  98. patch    MACRO
  99.     IFEQ    NARG-2
  100.         move.l    a0,-(a7)
  101.         lea    \1,a0
  102.         move.w    #$4ef9,(a0)+
  103.         pea    \2
  104.         move.l    (a7)+,(a0)
  105.         move.l    (a7)+,a0
  106.     ELSE
  107.         FAIL    arguments "patch"
  108.     ENDC
  109.     ENDM
  110.  
  111. ****************************************************************
  112. ***** write opcode JSR \2 to address \1
  113. patchs    MACRO
  114.     IFEQ    NARG-2
  115.         move.l    a0,-(a7)
  116.         lea    \1,a0
  117.         move.w    #$4eb9,(a0)+
  118.         pea    \2
  119.         move.l    (a7)+,(a0)
  120.         move.l    (a7)+,a0
  121.     ELSE
  122.         FAIL    arguments "patchs"
  123.     ENDC
  124.     ENDM
  125.  
  126. ****************************************************************
  127. ***** wait of vertical blank
  128. waitvb    MACRO
  129.     IFEQ    NARG
  130. .loop1\@    btst    #0,(_custom+vposr+1)
  131.         beq    .loop1\@
  132. .loop2\@    btst    #0,(_custom+vposr+1)
  133.         bne    .loop2\@
  134.     ELSE
  135.         FAIL    arguments "waitvb"
  136.     ENDC
  137.     ENDM
  138.  
  139. ****************************************************************
  140. ***** wait for pressing any button
  141. waitbutton    MACRO
  142.     IFEQ    NARG
  143.     
  144. .down\@        waitvb
  145.         btst    #CIAB_GAMEPORT0,(ciapra+_ciaa)        ;LMB
  146.         beq    .up\@
  147.         btst    #POTGOB_DATLY-8,(potinp+_custom)    ;RMB
  148.         beq    .up\@
  149.         btst    #CIAB_GAMEPORT1,(ciapra+_ciaa)        ;FIRE
  150.         bne    .down\@
  151. .up\@        waitvb        ;entprellen
  152.         btst    #CIAB_GAMEPORT0,(ciapra+_ciaa)        ;LMB
  153.         beq    .up\@
  154.         btst    #POTGOB_DATLY-8,(potinp+_custom)    ;RMB
  155.         beq    .up\@
  156.         btst    #CIAB_GAMEPORT1,(ciapra+_ciaa)        ;FIRE
  157.         beq    .up\@
  158.         waitvb        ;entprellen
  159.     ELSE
  160.         FAIL    arguments "waitbutton"
  161.     ENDC
  162.     ENDM
  163.  
  164. ****************************************************************
  165. ***** flash the screen and wait for LMB
  166. blitz        MACRO
  167.         move    #$4200,bplcon0+_custom
  168.         move.w    d0,-(a7)
  169. .lpbl\@        move.w    d0,$dff180
  170.         subq.w    #1,d0
  171.         btst    #6,$bfe001
  172.         bne    .lpbl\@
  173.         waitvb            ;entprellen
  174. .lp2bl\@    move.w    d0,$dff180
  175.         subq.w    #1,d0
  176.         btst    #6,$bfe001
  177.         beq    .lp2bl\@
  178.         move.w    (a7)+,d0
  179.         ENDM
  180.  
  181. ****************************************************************
  182. ***** install Vertical-Blank-Interrupt which quits on LMB pressed
  183. QUITVBI        MACRO
  184.         move.l    a0,-(a7)
  185.         lea    .vbi,a0
  186.         move.l    a0,$6c
  187.         bra    .g
  188. .vbi        btst    #6,$bfe001
  189.         beq    .vbi+1        ;create "address error"
  190.         move.w    #INTF_VERTB,_custom+intreq
  191.         rte
  192. .g        move.w    #INTF_SETCLR|INTF_INTEN|INTF_VERTB,_custom+intena
  193.         move.w    #INTF_VERTB,_custom+intreq
  194.         move.l    (a7)+,a0
  195.     ENDM
  196.  
  197. ;======================================================================
  198. ;    return-values for termination (resload_Abort)
  199. ;======================================================================
  200.  
  201. TDREASON_OK        = -1    ;normal termination
  202. TDREASON_DOSREAD    = 1    ;error with resload_ReadFile
  203. TDREASON_DOSWRITE    = 2    ;error with resload_SaveFile
  204. TDREASON_EXCEPTION    = 3    ;(private only WHDLoad)
  205. TDREASON_RESET        = 4    ;(private only WHDLoad)
  206. TDREASON_DEBUG        = 5    ;make coredump and quit
  207. TDREASON_DOSLIST    = 6    ;error with resload_ListFiles
  208. TDREASON_DISKLOAD    = 7    ;error with resload_DiskLoad
  209. TDREASON_FALSEMODE    = 9999    ;(private only WHDLoad)
  210.  
  211. ;======================================================================
  212. ; Slave        Version 1
  213. ;======================================================================
  214.  
  215.     STRUCTURE    WhdloadSlave,0
  216.         STRUCT    ws_Security,4    ;moveq #-1,d0 + rts
  217.         STRUCT    ws_ID,8        ;"WHDLOADS"
  218.         UWORD    ws_Version    ;version of Whdload that is required
  219.         UWORD    ws_Flags    ;see below
  220.         ULONG    ws_BaseMemSize    ;size of mem required by game
  221.                     ;(must multiple of $1000, max=$200000)
  222.         ULONG    ws_ExecInstall    ;address in BaseMem where space is for a fake ExecLibrary
  223.                     ;installed by the Loader to survive a RESET
  224.                     ;for example $400, required are at least 84 Bytes
  225.         RPTR    ws_GameLoader    ;start of slave-code
  226.                     ;will called from WHDLoad after init (in SuperVisor)
  227.                 ;don't forget : the slave must be 100.00% PC-RELATIVE
  228.         RPTR    ws_CurrentDir    ;directory in which the mainloader should search for files
  229.         RPTR    ws_DontCache    ;pattern string for files which must not cached
  230.  
  231.         LABEL    ws_SIZEOF
  232.  
  233. ;Flags for ws_Flags
  234.  BITDEF WHDL,Disk,0    ;means only diskimages (result is a different PRELOAD)
  235.  
  236. ;======================================================================
  237. ; the JMP-Tower in WHDLoad (similar to a library)
  238. ; resident Loader
  239. ;    in "WHDLoad"
  240. ;    can called in HARD-State only
  241. ;    structure is a JMP-Tower
  242. ;======================================================================
  243.  
  244.     STRUCTURE    ResidentLoader,0
  245.         ULONG    resload_Install        ;(privat ONLY from WHDLoad)
  246.         ULONG    resload_Abort        ;return to operating system
  247.             ; Übergabe :    (a7)    = ULONG success (one of TDREASON_xxx)
  248.             ;        (4,a7)    = ULONG primary error code (e.g. doserrorcode)
  249.             ;        (8,a7)    = ULONG secondary error code (e.g. object name)
  250.             ;this must called via JMP ! (not JSR)
  251.             ;all other routines via JSR !
  252.         ULONG    resload_LoadFile    ;load to BaseMem
  253.             ; Übergabe :    a0 = CPTR name of file
  254.             ;        a1 = APTR address
  255.             ; Rückgabe :    d0 = BOOL success (size of file)
  256.             ;        d1 = ULONG dos errcode (0 if all went ok)
  257.         ULONG    resload_SaveFile    ;save from BaseMem
  258.             ; Übergabe :    d0 = LONG length to save
  259.             ;        a0 = CPTR name of file
  260.             ;        a1 = APTR address
  261.             ; Rückgabe :    d0 = BOOL success
  262.             ;        d1 = ULONG dos errcode (0 if all went ok)
  263.         ULONG    resload_SetCACR        ;sets the CACR (also ok with 68000's and from user-state)
  264.             ; Übergabe :    d0 = ULONG new cacr
  265.             ;        d1 = ULONG mask (bits to change)
  266.             ; Rückgabe :    d0 = ULONG old cacr
  267.         ULONG    resload_ListFiles    ;list files in dir to buffer
  268.             ; Übergabe :    d0 = ULONG buffer size (a1)
  269.             ;        a0 = CPTR name of directory to scan (relative of course)
  270.             ;        a1 = APTR buffer (MUST lie inside Slave !!!)
  271.             ; Rückgabe :    d0 = ULONG amount of listed names
  272.             ;        d1 = ULONG dos errcode (0 if all went ok)
  273.         ULONG    resload_Decrunch    ;decrunch memory
  274.             ; Übergabe :    a0 = APTR source
  275.             ;        a1 = APTR destination (can be equal to a0)
  276.             ; Rückgabe :    d0 = BOOL success (size of file unpacked)
  277.         ULONG    resload_LoadFileDecrunch
  278.             ; Übergabe :    a0 = CPTR name of file (anywhere)
  279.             ;        a1 = APTR address (MUST inside BaseMem !!!)
  280.             ; Rückgabe :    d0 = BOOL success (size of file)
  281.             ;        d1 = ULONG dos errcode (0 if all went ok)
  282.         ULONG    resload_FlushCache    ;flush all caches
  283.             ; Übergabe :    -
  284.             ; Rückgabe :    -
  285.         ULONG    resload_GetFileSize
  286.             ; Übergabe :    a0 = CPTR name of file
  287.             ; Rückgabe :    d0 = LONG size of file or 0 if does'nt exist
  288.         ULONG    resload_DiskLoad
  289.             ; Übergabe :    d0 = ULONG offset
  290.             ;        d1 = ULONG size
  291.             ;        d2 = ULONG disk number
  292.             ;        a0 = APTR destination
  293.             ; Rückgabe :    d0 = BOOL success
  294.             ;        d1 = ULONG dos errorcode (if failed)
  295.         LABEL    resload_SIZEOF
  296.  
  297. resload_CheckFileExist = resload_GetFileSize
  298.  
  299. ;======================================================================
  300.  
  301.  ENDC
  302.  
  303.